//
// Created by PC on 2023/11/6.
/*
 * OJ: http://ybt.ssoier.cn:8088/problem_show.php?pid=1233
 * OJ: https://www.luogu.com.cn/problem/P1190
 * 通过
 * 1233：接水问题II

时间限制: 1000 ms         内存限制: 65536 KB
【题目描述】

学校里有一个水房，水房里一共装有m个龙头可供同学们打开水，每个龙头每秒钟的供水量相等，均为1。

现在有n名同学准备接水，他们的初始接水顺序已经确定。将这些同学按接水顺序从1到n编号，i号同学的接水量为wi。接水开始时，1到m号同学各占一个水龙头，并同时打开水龙头接水。当其中某名同学j完成其接水量要求wj后，下一名排队等候接水的同学k马上接替j同学的位置开始接水。这个换人的过程是瞬间完成的，且没有任何水的浪费。即j同学第x秒结束时完成接水，则k同学第x+1 秒立刻开始接水。 若当前接水人数n’不足m，则只有n’个龙头供水，其它m-n’个龙头关闭。

现在给出n名同学的接水量，按照上述接水规则，问所有同学都接完水需要多少秒。
【输入】

第1行2个整数n和m，用一个空格隔开，分别表示接水人数和龙头个数。

第2 行n个整数 w1、w2、……、wn，每两个整数之间用一个空格隔开，wi表示 i 号同学的接水量。
【输出】

输出只有一行，1个整数，表示接水所需的总时间。
【输入样例】
5 3
4 4 1 2 1
【输出样例】
4
样例输入#2：
8 4
23 71 87 32 70 93 80 76
样例输出#2：
163
 * */
//


#include <iostream>

using namespace std;

int main()
{
    // n: 学生数 m: 水管数
    int n,m;
    cin>>n>>m;
    // s: 存学生 l:存水管
    int s[n],l[m]={0};
    // 所有水管最小接水数
//    int min_l=(int)2e31-1;
    for (int i = 0; i < n; ++i)
        cin>>s[i];
    for (int i = 0; i < n; ++i)
    {
        // 最小接水数的水管索引
        int min_index=0;
        int min_l=l[0];
        for (int j = 0; j < m; ++j)
        {
            if(min_l>l[j])
            {
                min_l=l[j];
                min_index=j;
            }
        }
        l[min_index]+=s[i];
    }
    int ret=l[0];
    for (int k = 0; k < m; ++k)
    {
        ret=max(ret,l[k]);
    }
    cout<<ret;
    return 0;
}